一.Servlet的概述与作用

1.Servlet概述

在前面说到了 Servlet, 今天就来细讲Servlet。

Servlet是运行在服务端的Java小程序,是sun公司提供的一套规范,用来处理客户端请求,响应给浏览器的动态资源。

Servlet是JavaWeb三个组件之一(Servlet,Filter,Listener),最重要。

2.Servlet的作用

Servlet的作用:用来处理从客服端发送过来的请求,并对请求作出响应。

所以Servlet的任务就有:

1.获取请求数据

2.处理请求

3.完成响应

二.Servlet的实现

(1)Servlet规范要求:Servlet需要编写实现类,并且在web.xml中配置。

实现类:通常是继承javax.servlet.http.HttpServlet类,并复写doGet和doPost方法。

doGet()方法用于处理get请求。

doPost()方法用于处理post请求。一般我们编写doGet方法,然后doPost方法调用doGet方法。

(2)配置信息:在web.xml进行配置。

(3)代码实现

启动Tomcat执行

浏览器显示空白页面

三.Servlet的执行流程详解

如下图:
当浏览器输入url后先找配置文件web.xml中的url-pattern标签,然后找到后对应该name 找到servlet-name,从而找到Class文件的地址,最后进入该Servlet文件,执行doGet或doPost。

四.Servlet的生命周期(面试)

Servlet规范规定,所有的Servlet必须实现 javax.servlet.Servlet接口。
1.第一次调用时,将执行初始化方法:init(ServletConfig)

2.每一次调用时,都将执行service(ServletRequest,ServletResponse)方法

3.服务器关闭时,或者项目被移除,执行destroy()方法

JavaEE规范中提供了Servlet接口的实现类:

GenericServlet:通用servlet实现。没有实现service

HttpServlet:与Http协议有关的实现。实现servlet方法,完成与HTTP协议相关的操作。

request.getMethod() 获得请求的方式(get,post)

如果是get,将调用doGet()

如果是post,将调用doPost()

生命周期:就是一个对象从创建到销毁的过程,于是Servlet生命周期就是其从创建到销毁的过程。

*何时创建:用户第一次访问Servlet创建Servlet的实例(单实例)

*何时销毁:当项目从服务器中移除的时候,或者关闭服务器的时候。

用户第一次访问Servlet的时候,服务器就会创建一个Servlet实例,那么Servlet中的init方法就会执行

任何一次的请求服务器都会创建一个新线程访问Servlet中的service方法。在service方法内部根据请求的方式的不同调用doGet或者doPost及其他方法(get请求调用doGet,doPost请求调用doPost)。

当Servlet中的服务器移除掉,或者关闭服务器是,service的实例就会被销毁,那么也就是destory方法就会执行。

五.Servlet的相关配置

(1)启动时候创建:servlet在服务器启动的时候创建好,进行对servlet的配置。

在web.xml中在标签中配置,在 number

传入的正整数number越小,则创建的优先级越高

(2)url-pattern的配置

必须以/开头,通常访问html页面时,首先从web项目的web.xml文件寻找匹配的路径,如果没有找到就再从默认的web.xml匹配,将使用缺省的servlet

(3)开发路径的编写

绝对路径:不需要找位置相对关系,以/开始的,分为客户端路径和服务端路径

*客户端路径一定要加工程名。/javaweb/servlet

*服务端路径不需要加工程名 /servlet

六.ServletContext & ServletConfig

1.ServletContext概述:服务器启动时,为每个WEB应用创建一个单独的ServletContext对象,我们可以使用这个对象存取数据,用这个对象存取数据可以在整个web应用中获得。

2.方法:

(1)向ServletContext中存数据,使用setAttribute方法 setAttribute(String name,Object object)

(2)从ServletContext中取数据,使用getAttribute方法 getAttribute(String name)返回值为Object

(3)从ServletContext中移除数据,使用removeAttribute(String name)

3.ServletContext()读取web工程下的文件:

ServletContext对象可以进行整个web项目的初始化数据重置,也可以获得项目的绝对路径,及指定的资源。

使用String RealPath = getRealPath(String path)获取绝对路径path为虚拟路径,应该是正斜线/开始,/表示跟目录(web)

使用InputStream inputstream = getResourceAsStream(String path)获取的是某个资源文件的InputStream输入流对象

4.代码演示:

先用getServletContext()获取一个对象

获得Properties对象进行加载load(in)流

最后使用pros.getProperty()来获取数据。在这里插入图片描述

其中 FileInputStream(realPath);该输入流中的参数必须是绝对路径

五.ServletConfig概述

刚才讲了ServletContext是servlet上下文,整个web都可以使用,方便我们想另外一个动态页面传输数据。同理servletconfig,则是获取每一个Servlet配置信息的工具,它有多个不像ServletContext。